import Vue from 'vue'
import VueRouter from 'vue-router'
// 导入路由所需的组件
import Home from '../views/Home'
import Login from '../views/Login'
import Users from '../components/Users'
import Rules from '../components/Rules'
import Rights from '../components/Rights'
import Category from '../components/Category'
import Data from '../components/Data'
import Goods from '../components/Goods'
import List from '../components/List'
import Params from '../components/Params'

Vue.use(VueRouter)

const routes = [
  {
    path: '/',
    redirect: '/home'
  },
  {
    path: '/login',
    name: 'login',
    component: Login
  },
  {
    path: '/home',
    name: 'home',
    component: Home,
    children: [
      {
        path: '/users',
        name: 'users',
        component: Users
      },
      {
        path: '/roles',
        name: 'rules',
        component: Rules
      },
      {
        path: '/rights',
        name: 'rights',
        component: Rights
      },
      {
        path: '/categories',
        name: 'category',
        component: Category
      },
      {
        path: '/reports',
        name: 'reports',
        component: Data
      },
      {
        path: '/goods',
        name: 'goods',
        component: Goods
      },
      {
        path: '/orders',
        name: 'orders',
        component: List
      },
      {
        path: '/params',
        name: 'params',
        component: Params
      }
    ]
  }
]

const router = new VueRouter({
  routes
})

/*
  项目中
    每一次打开电脑, 只能打开去登录路由
    其他所有路由, 必须登录后才能打开
    需要对每一个路由进行登录验证

  如何实现验证
    方案1: 每一个组件逐个书写
    方案2: 全局路由前置守卫
      当你要进入这个路由的时候, 会触发前置守卫

  如何验证登录过
    每当登录之后, 把 token 存储在 sessionStorage 内
    只要 sessionStorage 内有 token, 表示当前打开浏览器的本次是登录过的
      如果没有 token 信息, 表示至少关闭过浏览器, 或是本次打开浏览器没有登录

  token 验证
    前端验证 token 有没有, 作用是为了是否打开路由展示页面
    后端验证 token 对不对, 作用是为了服务器 是否给你返回数据

  注意:
    将来你一旦登录以后, 一定要存储一个 token 信息在 sessionStorage 内
*/

// 书写全局路由前置守卫
router.beforeEach((to, from, next) => {
  // 如果去的是 /login, 无需验证
  if (to.path === '/login') return next()

  // 验证是否登录
  const token = window.sessionStorage.getItem('token')

  // 验证 token 是否存在, 如果存在, 直接放行
  if (token) return next()

  // 代码来到这里, 表示 token 不存在, 应该让你 跳转回 /login
  // 如果你本身就是从 /login 去到 /users, 那么不需要跳转回来, 不过去就行了
  // 如果不是从 /login 去到 /users, 那么回到 /login
  if (from.path !== '/login') router.push('/login')
})

export default router
